/*
 * MedikamentErzeugung.java
 * 
 *  author: Daniel Rudigier
 *    date: 21.05.2008
 * 
 * 
 */
package ocumed.applikation.domainhandling;

import java.util.List;
import java.util.Vector;

import ocumed.domaene.behandlung.DMedikament;
import ocumed.persistenz.dao.DAOFactory;
import ocumed.persistenz.dao.MedikamentDAO;
import ocumed.persistenz.hibernate.OcMedikament;
import ocumed.teams.IMedikament;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author Daniel Rudigier
 *
 */
public class MedikamentErzeugung {
    private static final Log log = LogFactory.getLog(MedikamentErzeugung.class);
    
    // access the domain handler
    private DomainHandler dh;
    
    private MedikamentDAO m_medikamentDAO;
    
    
    public MedikamentErzeugung() {
    	m_medikamentDAO = DAOFactory.get(DAOFactory.RDBMS).getMedikamentDAO();
		dh = DomainHandler.getInstance();
    }

    /**
     * @return 
     */
    public List<IMedikament> getDMedikamente() {
        log.debug("get all from db");
        
        m_medikamentDAO.start();
        
        List<IMedikament> alleMedikamente = new Vector<IMedikament>();
        for (OcMedikament m : m_medikamentDAO.findAll()) {
            alleMedikamente.add(getDMedikament(m));
        }        
        
        return alleMedikamente;
    }

    /**
     * @param m
     * @return
     */
    public DMedikament getDMedikament(OcMedikament m) {
        DMedikament med = dh.getMedikamente().get(m.getMedikamentid());

        if (med != null) {
            log.debug("restored from cache: " + med.getMedikamentid());
            return med;
        }
        
        med = new DMedikament(m.getMedikamentid(), m.getMedikamentname(),
                m.getMedikamentbeschreibung(), m.getMedikamentpackungsgroesse(),
                m.getMedikamentstandarddosierung());
        dh.getMedikamente().put(m.getMedikamentid(), med);
        
        return med;
    }

    
	public IMedikament getDMedikament(int id) {
        m_medikamentDAO.start();
        OcMedikament m = m_medikamentDAO.findById(id);

		return getDMedikament(m);
	}


}
